package org.dromara.admin.service;

import org.dromara.admin.domain.Employee;
import org.dromara.admin.domain.model.UserPasswordBo;
import org.dromara.admin.domain.vo.EmployeeVo;
import org.dromara.admin.domain.bo.EmployeeBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.system.domain.bo.SysUserBo;

import java.util.Collection;
import java.util.List;

/**
 * 员工信息Service接口
 *
 * @author Lion Li
 * @date 2025-10-10
 */
public interface IEmployeeService {

    /**
     * 查询员工信息
     *
     * @param id 主键
     * @return 员工信息
     */
    EmployeeVo queryById(Long id);

    /**
     * 分页查询员工信息列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 员工信息分页列表
     */
    TableDataInfo<EmployeeVo> queryPageList(EmployeeBo bo, PageQuery pageQuery);

    /**
     * 分页查询当前登录用户员工信息列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 员工信息分页列表
     */
    TableDataInfo<EmployeeVo> queryPageMyList(EmployeeBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的员工信息列表
     *
     * @param bo 查询条件
     * @return 员工信息列表
     */
    List<EmployeeVo> queryList(EmployeeBo bo);

    /**
     * 新增员工信息
     *
     * @param bo 员工信息
     * @return 是否新增成功
     */
    Boolean insertByBo(EmployeeBo bo);

    /**
     * 修改员工信息
     *
     * @param bo 员工信息
     * @return 是否修改成功
     */
    Boolean updateByBo(EmployeeBo bo);

    /**
     * 校验并批量删除员工信息信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 注册公司账号添加信息到员工表
     *
     * @param user 注册信息
     * @return 员工信息
     */
    Employee insertByRegisterCompany(SysUserBo user);

    /**
     * 注册员工账号添加信息到员工表
     *
     * @param user 注册信息
     * @return 员工信息
     */
    Employee insertByRegisterEmployee(SysUserBo user);

    /**
     * 后台审核公司的注册账号
     *
     * @param userId 审核的用户ID
     * @return
     */
    Boolean auditRegister(Long userId);


    /**
     * 补全公司信息后员工关联主体
     *
     * @param userId    用户ID
     * @param companyId 公司主体ID
     * @return
     */
    Boolean updateByCompanyId(Long userId, Long companyId);

    /**
     * 修改密码
     *
     * @param userPasswordBo 修改密码信息
     * @return
     */
    int resetUserPwd(UserPasswordBo userPasswordBo);

    /**
     * 根据员工id查询所属主体公司ID
     *
     * @param userId 用户id
     * @return 主体公司id
     */
    Long queryCompanyIdByUserId(Long userId);
}
